home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / egem_200.lzh / EGEM.2_0 / SOURCE / ALERTS.C next >
Encoding:
C/C++ Source or Header  |  1994-09-07  |  15.7 KB  |  438 lines

  1.  
  2. #include "proto.h"
  3. #include <string.h>
  4.  
  5. #ifdef __MINT_LIB__
  6. #define I_CAST    (char *)
  7. #else
  8.  
  9. #ifdef __PUREC__
  10. #define I_CAST    (int *)
  11. #else
  12. #define I_CAST    (short *)
  13. #endif
  14.  
  15. #endif
  16.  
  17. #define ALERTFLY   1
  18. #define ALERTST1   2
  19. #define ALERTICN   3
  20. #define ALERTST2   4
  21. #define ALERTST3   5
  22. #define ALERTST4   6
  23. #define ALERTST5   7
  24. #define ALERTST6   8
  25. #define ALERTST7   9
  26. #define ALERTST8  10
  27. #define ALERTST9  11
  28. #define ALERTST0  12
  29. #define ALERTBT1  13
  30. #define ALERTBT2  15
  31. #define ALERTBT4  17
  32. #define ALERTBT3  19
  33. #define ALERTBT5  21
  34.  
  35. static char string[] = "";
  36.  
  37. static int alert_text[] = {ALERTST1,ALERTST2,ALERTST3,ALERTST4,ALERTST5,ALERTST6,
  38.                            ALERTST7,ALERTST8,ALERTST9,ALERTST0};
  39.  
  40. static int alert_btn[] = {ALERTBT1,ALERTBT2,ALERTBT3,ALERTBT4,ALERTBT5};
  41. static char alert_hot[5];
  42.  
  43. static int IMAGE1[] = {
  44. 0x007F, 0xFC00, 0x0080, 0x0200, 0x017F, 0xFD00, 0x02FF, 0xFE80,
  45. 0x05FF, 0xFF40, 0x0BFF, 0xFFA0, 0x17FF, 0xFFD0, 0x2FFF, 0xFFE8,
  46. 0x5FFF, 0xFFF4, 0xBFFF, 0xFFFA, 0xBFFF, 0xFFFA, 0xB8C1, 0x8C3A,
  47. 0xB777, 0x75DA, 0xB7F7, 0x75DA, 0xB7F7, 0x75DA, 0xB8F7, 0x743A,
  48. 0xBF77, 0x75FA, 0xBF77, 0x75FA, 0xB777, 0x75FA, 0xB8F7, 0x8DFA,
  49. 0xBFFF, 0xFFFA, 0xBFFF, 0xFFFA, 0x5FFF, 0xFFF4, 0x2FFF, 0xFFE8,
  50. 0x17FF, 0xFFD0, 0x0BFF, 0xFFA0, 0x05FF, 0xFF40, 0x02FF, 0xFE80,
  51. 0x017F, 0xFD00, 0x0080, 0x0200, 0x007F, 0xFC00, 0x0000, 0x0000};
  52.  
  53. static int IMAGE3[] = {
  54. 0x0001, 0x8000, 0x0002, 0x4000, 0x0004, 0x2000, 0x0009, 0x9000,
  55. 0x0013, 0xC800, 0x0027, 0xE400, 0x004F, 0xF200, 0x009F, 0xF900,
  56. 0x013C, 0x3C80, 0x027C, 0x3E40, 0x04FC, 0x3F20, 0x09FC, 0x3F90,
  57. 0x13FC, 0x3FC8, 0x27FC, 0x3FE4, 0x4FFC, 0x3FF2, 0x9FFC, 0x3FF9,
  58. 0x9FFC, 0x3FF9, 0x4FFC, 0x3FF2, 0x27FC, 0x3FE4, 0x13FC, 0x3FC8,
  59. 0x09FF, 0xFF90, 0x04FF, 0xFF20, 0x027C, 0x3E40, 0x013C, 0x3C80,
  60. 0x009F, 0xF900, 0x004F, 0xF200, 0x0027, 0xE400, 0x0013, 0xC800,
  61. 0x0009, 0x9000, 0x0004, 0x2000, 0x0002, 0x4000, 0x0001, 0x8000};
  62.  
  63. static int IMAGE4[] = {
  64. 0x7FFF, 0xFFFE, 0x8000, 0x0001, 0x9FFF, 0xFFF9, 0x4FE0, 0x0FF2,
  65. 0x4FC0, 0x07F2, 0x2787, 0xC3E4, 0x27FF, 0xE3E4, 0x13FF, 0xE3C8,
  66. 0x13FF, 0xC7C8, 0x09FF, 0x0F90, 0x09FE, 0x1F90, 0x04FC, 0x3F20,
  67. 0x04FC, 0x3F20, 0x027C, 0x3E40, 0x027C, 0x3E40, 0x013C, 0x3C80,
  68. 0x013F, 0xFC80, 0x009F, 0xF900, 0x009C, 0x3900, 0x004C, 0x3200,
  69. 0x004F, 0xF200, 0x0027, 0xE400, 0x0027, 0xE400, 0x0013, 0xC800,
  70. 0x0013, 0xC800, 0x0009, 0x9000, 0x0009, 0x9000, 0x0004, 0x2000,
  71. 0x0004, 0x2000, 0x0002, 0x4000, 0x0002, 0x4000, 0x0001, 0x8000};
  72.  
  73. static int IMAGE5[] = {
  74. 0x007F, 0xFC00, 0x0080, 0x0200, 0x013F, 0xF900, 0x027F, 0xFC80,
  75. 0x04FF, 0xFE40, 0x09FF, 0xFF20, 0x13FF, 0xFF90, 0x27FF, 0xFFC8,
  76. 0x4FFF, 0xFFE4, 0x9FFF, 0xFFF2, 0x9FFF, 0xFFF2, 0x9FFF, 0xFFF2,
  77. 0x98C1, 0x8C32, 0x9777, 0x75D2, 0x97F7, 0x75D2, 0x98F7, 0x7432,
  78. 0x9F77, 0x75F2, 0x9777, 0x75F2, 0x98F7, 0x8DF2, 0x9FFF, 0xFFF2,
  79. 0x9FFF, 0xFFF2, 0x9FFF, 0xFFF2, 0x4FFF, 0xFFE4, 0x27FF, 0xFFC8,
  80. 0x13FF, 0xFF90, 0x09FF, 0xFF20, 0x04FF, 0xFE40, 0x027F, 0xFC80,
  81. 0x013F, 0xF900, 0x0080, 0x0200, 0x007F, 0xFC00, 0x0000, 0x0000};
  82.  
  83. static int IMAGE6[] = {
  84. 0x007F, 0xFE00, 0x00C0, 0x0300, 0x01BF, 0xFD80, 0x037F, 0xFEC0,
  85. 0x06FF, 0xFF60, 0x0DFF, 0xFFB0, 0x1BFF, 0xFFD8, 0x37FF, 0xFFEC,
  86. 0x6FFF, 0xFFF6, 0xDFFF, 0xFFFB, 0xB181, 0x860D, 0xA081, 0x0205,
  87. 0xA4E7, 0x3265, 0xA7E7, 0x3265, 0xA3E7, 0x3265, 0xB1E7, 0x3205,
  88. 0xB8E7, 0x320D, 0xBCE7, 0x327D, 0xA4E7, 0x327D, 0xA0E7, 0x027D,
  89. 0xB1E7, 0x867D, 0xBFFF, 0xFFFD, 0xDFFF, 0xFFFB, 0x6FFF, 0xFFF6,
  90. 0x37FF, 0xFFEC, 0x1BFF, 0xFFD8, 0x0DFF, 0xFFB0, 0x06FF, 0xFF60,
  91. 0x037F, 0xFEC0, 0x01BF, 0xFD80, 0x00C0, 0x0300, 0x007F, 0xFE00};
  92.  
  93. static int IMAGE7[] = {
  94. 0x0000, 0x0000, 0x0000, 0x0000, 0x1FFF, 0xFFE0, 0x2C00, 0x00F0,
  95. 0x3407, 0x80D8, 0x2C0F, 0xC0BC, 0x340C, 0xC0DC, 0x2C00, 0xC0BC,
  96. 0x3401, 0x80DC, 0x2C03, 0x00BC, 0x3403, 0x00DC, 0x2C00, 0x00BC,
  97. 0x3403, 0x00DC, 0x2C03, 0x00BC, 0x3400, 0x00DC, 0x2FFF, 0xFFBC,
  98. 0x3555, 0x555C, 0x2AAA, 0xAABC, 0x35FF, 0xFD5C, 0x2B80, 0x06BC,
  99. 0x3538, 0x035C, 0x2B38, 0x02BC, 0x3538, 0x035C, 0x2B38, 0x02BC,
  100. 0x3538, 0x035C, 0x2B38, 0x02BC, 0x3500, 0x035C, 0x1FFF, 0xFFFC,
  101. 0x0FFF, 0xFFFC, 0x07FF, 0xFFF8, 0x0000, 0x0000, 0x0000, 0x0000};
  102.  
  103. static int IMAGE8[] = {
  104. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  105. 0x0000, 0x0000, 0x0000, 0xC790, 0x0000, 0xF844, 0x003D, 0xF830,
  106. 0x01FF, 0xFCB2, 0x07FF, 0xFC00, 0x0FFF, 0xF848, 0x1F3F, 0xF800,
  107. 0x1E67, 0xF800, 0x3FCF, 0xFC00, 0x3CFF, 0xFC00, 0x3C9F, 0xFC00,
  108. 0x7F9F, 0xFE00, 0x7FFF, 0xFE00, 0x7FFF, 0xFE00, 0x7FFF, 0xFE00,
  109. 0x3FFF, 0xFC00, 0x3FFF, 0xFC00, 0x3FFF, 0xFC00, 0x1FFF, 0xF800,
  110. 0x1FFF, 0xF800, 0x0FFF, 0xF000, 0x07FF, 0xE000, 0x01FF, 0x8000,
  111. 0x003C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
  112.  
  113. static int IMAGE9[] = {
  114. 0x0000, 0x0000, 0x0001, 0xC000, 0x0073, 0xE000, 0x00FB, 0xE700,
  115. 0x00FB, 0xEF80, 0x1CFB, 0xEF80, 0x3EFB, 0xEF80, 0x3EFB, 0xEF80,
  116. 0x3EFB, 0xEF80, 0x3EFB, 0xEF80, 0x3EFB, 0xEF80, 0x3EFB, 0xEF80,
  117. 0x3EFB, 0xEF9C, 0x3EFB, 0xEFBC, 0x3EFB, 0xEFBC, 0x3FFF, 0xFF7C,
  118. 0x3FFF, 0xFF7C, 0x3FFF, 0xFF7C, 0x3FFF, 0xFEFC, 0x3FFF, 0xF7F8,
  119. 0x3FFF, 0xDFF8, 0x3FFF, 0x7FF0, 0x3FFF, 0xFFF0, 0x3FFD, 0xFFE0,
  120. 0x1FFD, 0xFFC0, 0x0FFF, 0xFF80, 0x07FF, 0xFF00, 0x03FF, 0xFE00,
  121. 0x03FF, 0xFE00, 0x03FF, 0xFE00, 0x03FF, 0xFE00, 0x0000, 0x0000};
  122.  
  123. static int IMAGE10[] = {
  124. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0FFF, 0xFDE0,
  125. 0x1F80, 0x07F0, 0x1F80, 0xE7F8, 0x1F80, 0xE7F8, 0x1F80, 0xE7F8,
  126. 0x1F80, 0xE7F8, 0x1F80, 0xE7F8, 0x1F80, 0xE7F8, 0x1FC0, 0x0FF8,
  127. 0x1FFF, 0xFFF8, 0x1FFF, 0xFFF8, 0x1FFF, 0xFFF8, 0x1C00, 0x0038,
  128. 0x1C00, 0x0038, 0x1CF0, 0x0038, 0x1C00, 0x0038, 0x1CFF, 0x6038,
  129. 0x1C00, 0x0038, 0x1CE4, 0x0038, 0x1C00, 0x0038, 0x1CFF, 0x9838,
  130. 0x1C00, 0x0038, 0x14DF, 0x3038, 0x1400, 0x0038, 0x1C00, 0x0038,
  131. 0x0FFF, 0xFFF0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
  132.  
  133. static int IMAGE11[] = {
  134. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000,
  135. 0x0000, 0xE000, 0x0001, 0xF000, 0x0003, 0xF800, 0x0005, 0xFC00,
  136. 0x0008, 0xFE00, 0x0010, 0x7F00, 0x0020, 0x7F80, 0x0040, 0xFFC0,
  137. 0x0087, 0xCF80, 0x010F, 0x8740, 0x010F, 0x82C0, 0x028F, 0x85C0,
  138. 0x0347, 0x0BC0, 0x03A0, 0x17C0, 0x01D0, 0x2FC0, 0x0268, 0x5F80,
  139. 0x0334, 0xBF00, 0x031B, 0x7E00, 0x018C, 0xFC00, 0x00CD, 0xF800,
  140. 0x0065, 0xF000, 0x0039, 0xE000, 0x001D, 0xC000, 0x000D, 0x8000,
  141. 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
  142.  
  143. static int IMAGE12[] = {
  144. 0x3FFF, 0xFFFC, 0x7FFF, 0xFFFE, 0x7FF8, 0x1FFE, 0x7FE0, 0x07FE,
  145. 0x7F80, 0x01FE, 0x7F00, 0x00FE, 0x7E00, 0x007E, 0x7E01, 0xC07E,
  146. 0x7E03, 0xC07E, 0x7F07, 0x80FE, 0x7FFF, 0x01FE, 0x7FFE, 0x01FE,
  147. 0x7FFC, 0x03FE, 0x7FF8, 0x07FE, 0x7FF8, 0x07FE, 0x7FF0, 0x0FFE,
  148. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF8, 0x1FFE, 0x7FFC, 0x3FFE,
  149. 0x7FFF, 0xFFFE, 0x7FFF, 0xFFFE, 0x7FFC, 0x3FFE, 0x7FF8, 0x1FFE,
  150. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF8, 0x1FFE,
  151. 0x7FFC, 0x3FFE, 0x7FFF, 0xFFFE, 0x3FFF, 0xFFFC, 0x0000, 0x0000};
  152.  
  153. static int IMAGE13[] = {
  154. 0x0000, 0x0000, 0x0000, 0x0700, 0x0000, 0x0F80, 0x0000, 0x0F80,
  155. 0x0000, 0x0F80, 0x0000, 0x0F80, 0x0000, 0x0F80, 0x0000, 0x0F80,
  156. 0x0000, 0x0F80, 0x0000, 0x0F80, 0x0000, 0x0F80, 0x0079, 0xEF9C,
  157. 0x0EFB, 0xEFBC, 0x1EFB, 0xEFBC, 0x1EFB, 0xEF7C, 0x16AA, 0xAF7C,
  158. 0x1EFB, 0xEF7C, 0x0D75, 0xDCBC, 0x038E, 0x37F8, 0x1FFF, 0xDFF8,
  159. 0x1FFF, 0x7FF0, 0x1FFF, 0xFFF0, 0x1FFD, 0xFFE0, 0x1FFF, 0xFFC0,
  160. 0x0FFD, 0xFF80, 0x07FF, 0xFE00, 0x01FF, 0xF400, 0x015F, 0xFC00,
  161. 0x01FF, 0xFC00, 0x01FF, 0xFC00, 0x0000, 0x0000, 0x0000, 0x0000};
  162.  
  163. static int IMAGE14[] = {
  164. 0x3FFF, 0xFFFC, 0x7FFF, 0xFFFE, 0x7FFE, 0x7FFE, 0x7FFC, 0x7FFE,
  165. 0x7FE4, 0x4FFE, 0x7FC4, 0x47FE, 0x7FC4, 0x47FE, 0x7FC4, 0x47FE,
  166. 0x7FC4, 0x47FE, 0x7F44, 0x47FE, 0x7E44, 0x47FE, 0x7E44, 0x47FE,
  167. 0x7E44, 0x467E, 0x7E44, 0x447E, 0x7E44, 0x447E, 0x7E40, 0x047E,
  168. 0x7E40, 0x047E, 0x7E40, 0x047E, 0x7E00, 0x087E, 0x7E00, 0x107E,
  169. 0x7E00, 0x407E, 0x7E00, 0x007E, 0x7E01, 0x00FE, 0x7F00, 0x00FE,
  170. 0x7F00, 0x01FE, 0x7F80, 0x03FE, 0x7FC0, 0x0FFE, 0x7FFF, 0xFFFE,
  171. 0x7FFF, 0xFFFE, 0x7FFF, 0xFFFE, 0x3FFF, 0xFFFC, 0x0000, 0x0000};
  172.  
  173. static int IMAGE15[] = {
  174. 0x3FFF, 0xFFFC, 0x7FFF, 0xFFFE, 0x7FFC, 0x3FFE, 0x7FF8, 0x1FFE,
  175. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF8, 0x1FFE,
  176. 0x7FFC, 0x3FFE, 0x7FFF, 0xFFFE, 0x7FFF, 0xFFFE, 0x7FC0, 0x1FFE,
  177. 0x7F80, 0x0FFE, 0x7F80, 0x0FFE, 0x7FC0, 0x0FFE, 0x7FF0, 0x0FFE,
  178. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE,
  179. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE,
  180. 0x7FF0, 0x0FFE, 0x7F80, 0x01FE, 0x7F00, 0x00FE, 0x7F00, 0x00FE,
  181. 0x7F80, 0x01FE, 0x7FFF, 0xFFFE, 0x3FFF, 0xFFFC, 0x0000, 0x0000};
  182.  
  183. static int IMAGE16[] = {
  184. 0x3FFF, 0xFFFC, 0x7FFF, 0xFFFE, 0x7FF8, 0x1FFE, 0x7FF0, 0x0FFE,
  185. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE,
  186. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE,
  187. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE,
  188. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF8, 0x1FFE, 0x7FFC, 0x3FFE,
  189. 0x7FFF, 0xFFFE, 0x7FFF, 0xFFFE, 0x7FFC, 0x3FFE, 0x7FF8, 0x1FFE,
  190. 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF0, 0x0FFE, 0x7FF8, 0x1FFE,
  191. 0x7FFC, 0x3FFE, 0x7FFF, 0xFFFE, 0x3FFF, 0xFFFC, 0x0000, 0x0000};
  192.  
  193. static int IMAGE17[] = {
  194. 0x0000, 0x0000, 0x0001, 0x0000, 0x0003, 0x8000, 0x0007, 0xC000,
  195. 0x0007, 0xE000, 0x000F, 0xF000, 0x000F, 0xF800, 0x002F, 0xFC00,
  196. 0x006F, 0xFE00, 0x00DF, 0xFE00, 0x01BF, 0xFC00, 0x037F, 0xFC00,
  197. 0x06FF, 0xF800, 0x037F, 0xFA00, 0x05BF, 0xFB00, 0x06DF, 0xF600,
  198. 0x076F, 0xED00, 0x07B7, 0xDB00, 0x07DB, 0xB700, 0x07ED, 0x6F00,
  199. 0x07F6, 0xDF00, 0x03FB, 0xBE00, 0x01FD, 0x7D80, 0x00FE, 0xFB80,
  200. 0x007E, 0xFB80, 0x003E, 0xFB00, 0x001E, 0xF000, 0x000E, 0xE000,
  201. 0x0006, 0xC000, 0x0002, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000};
  202.  
  203. static int IMAGE18[] = {
  204. 0x0003, 0xC000, 0x0006, 0x6000, 0x000D, 0xB000, 0x001B, 0xD800,
  205. 0x0037, 0xEC00, 0x006F, 0xF600, 0x00DC, 0x3B00, 0x01BC, 0x3D80,
  206. 0x037C, 0x3EC0, 0x06FC, 0x3F60, 0x0DFC, 0x3FB0, 0x1BFC, 0x3FD8,
  207. 0x37FC, 0x3FEC, 0x6FFC, 0x3FF6, 0xDFFC, 0x3FFB, 0xBFFC, 0x3FFD,
  208. 0xBFFC, 0x3FFD, 0xDFFC, 0x3FFB, 0x6FFC, 0x3FF6, 0x37FC, 0x3FEC,
  209. 0x1BFF, 0xFFD8, 0x0DFF, 0xFFB0, 0x06FC, 0x3F60, 0x037C, 0x3EC0,
  210. 0x01BC, 0x3D80, 0x00DC, 0x3B00, 0x006F, 0xF600, 0x0037, 0xEC00,
  211. 0x001B, 0xD800, 0x000D, 0xB000, 0x0006, 0x6000, 0x0003, 0xC000};
  212.  
  213. static int IMAGE19[] = {
  214. 0x0000, 0x0000, 0x003F, 0xFC00, 0x00FF, 0xFF00, 0x01FF, 0xFF80,
  215. 0x03FF, 0xFFC0, 0x03F0, 0x0FC0, 0x03E0, 0x07C0, 0x03E0, 0x07C0,
  216. 0x01C0, 0x07C0, 0x0000, 0x0F80, 0x0000, 0x1F80, 0x0000, 0x3F00,
  217. 0x0000, 0x7E00, 0x0000, 0xFC00, 0x0001, 0xF800, 0x0003, 0xF000,
  218. 0x0007, 0xE000, 0x0007, 0xC000, 0x000F, 0x8000, 0x000F, 0x8000,
  219. 0x000F, 0x8000, 0x000F, 0x8000, 0x000F, 0x8000, 0x0007, 0x0000,
  220. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000F, 0x8000,
  221. 0x001F, 0xC000, 0x001F, 0xC000, 0x000F, 0x8000, 0x0000, 0x0000};
  222.  
  223. static BITBLK alert_icn[] = {
  224.     { I_CAST IMAGE1, 4, 32, 0, 0, 1 },
  225.     { I_CAST IMAGE3, 4, 32, 0, 0, 1 },
  226.     { I_CAST IMAGE4, 4, 32, 0, 0, 1 },
  227.     { I_CAST IMAGE5, 4, 32, 0, 0, 1 },
  228.     { I_CAST IMAGE6, 4, 32, 0, 0, 1 },
  229.     { I_CAST IMAGE7, 4, 32, 0, 0, 1 },
  230.     { I_CAST IMAGE8, 4, 32, 0, 0, 1 },
  231.     { I_CAST IMAGE9, 4, 32, 0, 0, 1 },
  232.     { I_CAST IMAGE10, 4, 32, 0, 0, 1 },
  233.     { I_CAST IMAGE11, 4, 32, 0, 0, 1 },
  234.     { I_CAST IMAGE12, 4, 32, 0, 0, 1 },
  235.     { I_CAST IMAGE13, 4, 32, 0, 0, 1 },
  236.     { I_CAST IMAGE14, 4, 32, 0, 0, 1 },
  237.     { I_CAST IMAGE15, 4, 32, 0, 0, 1 },
  238.     { I_CAST IMAGE16, 4, 32, 0, 0, 1 },
  239.     { I_CAST IMAGE17, 4, 32, 0, 0, 1 },
  240.     { I_CAST IMAGE18, 4, 32, 0, 0, 1 },
  241.     { I_CAST IMAGE19, 4, 32, 0, 0, 1 }
  242. };
  243.  
  244. static OBJECT alert_tree[] = {
  245.     { -1, 1, 21, G_BOX, NONE, OUTLINED, CAST (0x21100L), 0,0, 52,14 },
  246.     { 2, -1, -1, (0x9<<8)+G_IBOX, SELECTABLE, NORMAL, CAST (0x57011100L), 50,0, 2,1 },
  247.     { 3, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,1, 1,1 },
  248.     { 4, -1, -1, G_IMAGE, NONE, NORMAL, CAST (&alert_icn[0]), 2,1, 12288,7680 },
  249.     { 5, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,2, 1,1 },
  250.     { 6, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,3, 1,1 },
  251.     { 7, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,4, 1,1 },
  252.     { 8, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,5, 1,1 },
  253.     { 9, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,6, 1,1 },
  254.     { 10, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,7, 1,1 },
  255.     { 11, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,8, 1,1 },
  256.     { 12, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,9, 1,1 },
  257.     { 13, -1, -1, G_STRING, NONE, NORMAL, CAST (string), 10,10, 2,1 },
  258.     { 15, 14, 14, G_BUTTON, 0x605, NORMAL, CAST (string), 2,12, 8,1 },
  259.     { 13, -1, -1, (0x5<<8)+G_IBOX, NONE, NORMAL, CAST (0x53011100L), 2,0, 1,1 },
  260.     { 17, 16, 16, G_BUTTON, 0x605, NORMAL, CAST (string), 12,12, 8,1 },
  261.     { 15, -1, -1, (0x5<<8)+G_IBOX, NONE, NORMAL, CAST (0x53011100L), 2,0, 1,1 },
  262.     { 19, 18, 18, G_BUTTON, 0x605, NORMAL, CAST (string), 32,12, 8,1 },
  263.     { 17, -1, -1, (0x5<<8)+G_IBOX, NONE, NORMAL, CAST (0x53011100L), 1,0, 1,1 },
  264.     { 21, 20, 20, G_BUTTON, 0x605, NORMAL, CAST (string), 22,12, 8,1 },
  265.     { 19, -1, -1, (0x5<<8)+G_IBOX, NONE, NORMAL, CAST (0x53011100L), 2,0, 1,1 },
  266.     { 0, 22, 22, G_BUTTON, 0x605, NORMAL, CAST (string), 42,12, 8,1 },
  267.     { 21, -1, -1, (0x5<<8)+G_IBOX, LASTOB, NORMAL, CAST (0x53011100L), 1,0, 1,1 }
  268. };
  269.  
  270. static boolean fixed = FALSE;
  271.  
  272. int xalert(int def,int undo,int icn,BITBLK *usr_icn,int center,int width,char *title,char *txt,char *btns)
  273. {
  274.     char buttons[128],text[512];
  275.     reg OBJECT *tree = alert_tree,*obj;
  276.     reg char *p,*q,*b;
  277.     reg int i,k,m,w;
  278.     int x,y,c,user=usr_icn!=NULL;
  279.  
  280.     if (txt==NULL || btns==NULL)
  281.         return (FAIL);
  282.  
  283.     if (fixed==FALSE)
  284.     {
  285.         rsrc_calc(tree,SCALING,8,16);
  286.         fixed = TRUE;
  287.     }
  288.  
  289.     def--;
  290.     undo--;
  291.  
  292.     if (usr_icn==NULL && icn>=0 && icn<=X_ICN_MAX)
  293.         usr_icn = &alert_icn[icn];
  294.  
  295.     obj = &tree[ALERTICN];
  296.  
  297.     obj->ob_x = x = gr_cw<<1;
  298.     m = y = gr_ch;
  299.  
  300.     if (usr_icn)
  301.     {
  302.         obj->ob_spec.bitblk = usr_icn;
  303.         obj->ob_flags &= ~HIDETREE;
  304.         x += obj->ob_width = (usr_icn->bi_x + (usr_icn->bi_wb<<3));
  305.         obj->ob_height = usr_icn->bi_y + usr_icn->bi_hl;
  306.         m += obj->ob_height+gr_ch;
  307.         x += gr_cw<<1;
  308.     }
  309.     else
  310.         obj->ob_flags |= HIDETREE;
  311.  
  312.     w = x;
  313.     x = (x + 7) & (~7);
  314.  
  315.     obj->ob_x += (x - w)>>1;
  316.  
  317.     strcpy(q=text,txt);
  318.     for (i=w=0;i<10;i++)
  319.     {
  320.         if (q)
  321.         {
  322.             ob_set_text(tree,k=alert_text[i],p=q);
  323.  
  324.             obj = &tree[k];
  325.             obj->ob_x = x;
  326.             obj->ob_y = y;
  327.             y += gr_ch;
  328.  
  329.             q = strchr(q,'|');
  330.             if (q)
  331.                 *q++ = '\0';
  332.  
  333.             w = max(w,(int) strlen(p));
  334.             obj->ob_width = w * gr_cw;
  335.         }
  336.         else
  337.             ob_set_text(tree,alert_text[i],string);
  338.     }
  339.  
  340.     w = x + (max(w,16) + 2) * gr_cw;
  341.  
  342.     if (user)
  343.     {
  344.         if ((y+=gr_ch)>=m)
  345.             x = tree[ALERTICN].ob_x;
  346.         else
  347.             y = max(m - (gr_ch<<1),y);
  348.     }
  349.     else
  350.     {
  351.         y = max(y+=gr_ch,m);
  352.         x = tree[ALERTICN].ob_x;
  353.     }
  354.  
  355.     strcpy(q=buttons,btns);
  356.     for (m=i=c=0;i<5;i++)
  357.     {
  358.         if (q)
  359.         {
  360.             c = i;
  361.             ob_set_text(tree,k=alert_btn[i],b=p=q);
  362.             q = strchr(q,'|');
  363.             if (q)
  364.                 *q++ = '\0';
  365.  
  366.             obj = &tree[k];
  367.  
  368.             obj->ob_y = y;
  369.             obj->ob_type = G_BUTTON;
  370.  
  371.             ob_undoflag(tree,k,HIDETREE);
  372.             if (def==i)
  373.                 ob_doflag(tree,k,DEFAULT);
  374.             else
  375.             {
  376.                 if (undo==i)
  377.                     obj->ob_type = (UNDO_BTN<<8)|G_BUTTON;
  378.                 ob_undoflag(tree,k,DEFAULT);
  379.             }
  380.  
  381.             if ((p=strchr(p,'['))!=NULL)
  382.             {
  383.                 strcpy(p,p+1);
  384.                 alert_hot[i] = *p;
  385.             }
  386.             else
  387.                 alert_hot[i] = '\0';
  388.  
  389.             if (width)
  390.                 m = max(m,(int) strlen(b));
  391.             else
  392.                 m += (obj->ob_width = max((int) strlen(b)+1,5)*gr_cw);
  393.         }
  394.         else
  395.             ob_doflag(tree,alert_btn[i],HIDETREE);
  396.     }
  397.  
  398.     if (width)
  399.     {
  400.         m = max(m+1,5)*gr_cw;
  401.         k = x + (m + (gr_cw<<1))*(c+1);
  402.     }
  403.     else
  404.         k = x + m + (gr_cw<<1)*(c+1);
  405.  
  406.     if (k<w)
  407.     {
  408.         if (center==BUTTONS_RIGHT)
  409.             x += w-k;
  410.         else if (center==BUTTONS_CENTERED)
  411.             x += (w-k)>>1;
  412.     }
  413.  
  414.     for (i=0;i<=c;i++)
  415.     {
  416.         obj = &tree[k=alert_btn[i]];
  417.         obj->ob_x = x;
  418.         if (width)
  419.             obj->ob_width = m;
  420.         x += obj->ob_width;
  421.         x += gr_cw<<1;
  422.         ob_set_hotkey(tree,k,alert_hot[i]);
  423.     }
  424.  
  425.     w = max(x,w);
  426.  
  427.     tree[ALERTFLY].ob_x = w - (gr_cw<<1) - 1;
  428.     tree->ob_width = w;
  429.     tree->ob_height = y + (gr_ch<<1);
  430.  
  431.     k = xdialog(alert_tree,title,TRUE,FALSE,AUTO_DIAL|MODAL|NO_ICONIFY);
  432.  
  433.     for (i=0;i<=c;i++)
  434.         if (k==alert_btn[i])
  435.             return (i);
  436.     return (-1);
  437. }
  438.